package simple.array;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * <a href="https://leetcode.cn/problems/minimum-absolute-difference/">1200. 最小绝对差</a>
 * 给你个整数数组 arr，其中每个元素都 不相同。
 * 请你找到所有具有最小绝对差的元素对，并且按升序的顺序返回。
 * 每对元素对 [a,b] 如下：
 *   a , b 均为数组 arr 中的元素
 *   a < b
 *   b - a 等于 arr 中任意两个元素的最小绝对差
 * 示例 1：
 *   输入：arr = [4,2,1,3]
 *   输出：[[1,2],[2,3],[3,4]]
 * 示例 2：
 *   输入：arr = [1,3,6,10,15]
 *   输出：[[1,3]]
 * 示例 3：
 *   输入：arr = [3,8,-10,23,19,-4,-14,27]
 *   输出：[[-14,-10],[19,23],[23,27]]
 * 提示：
 *   2 <= arr.length <= 10^5
 *   -10^6 <= arr[i] <= 10^6
 * @author 刘学松
 * @date 2023-07-26 15:19
 */
public class 最小绝对差 {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        Arrays.sort(arr);
        int min = Integer.MAX_VALUE;
        List<List<Integer>> lists = new ArrayList<>();
        int last = arr[0];
        for (int i = 1; i < arr.length; i++) {
            int curr = arr[i];
            int diff = curr - last;
            if (diff < min) {
                lists.clear();
                min = diff;
                List<Integer> list = new ArrayList<>();
                list.add(last);
                list.add(curr);
                lists.add(list);
            } else if (diff == min) {
                List<Integer> list = new ArrayList<>();
                list.add(last);
                list.add(curr);
                lists.add(list);
            }
            last = curr;
        }
        return lists;
    }
}
